import request from './request'

/**
 * 发送消息并获取流式响应
 * @param {Object} chatForm 聊天表单数据
 * @param {Function} callback 处理每个响应块的回调
 */
export function sendMessageStream(chatForm, callback) {
  let previousText = ''; // 跟踪之前收到的所有文本
  let hasReceivedData = false; // 标记是否收到过任何数据
  let chunkCount = 0; // 记录接收的数据块数量
  
  return request({
    url: '/deepseek/chat',
    method: 'post',
    data: chatForm,
    responseType: 'text', // 使用text类型接收流式响应
    onDownloadProgress: (progressEvent) => {
      try {
        // 直接从XHR对象获取响应文本
        const xhr = progressEvent.target || progressEvent.srcElement;
        if (!xhr || !xhr.responseText) return;
        
        const responseText = xhr.responseText;
        
        // 处理新内容
        if (responseText.length > previousText.length) {
          const newContent = responseText.substring(previousText.length);
          previousText = responseText;
          
          if (newContent.trim()) {
            hasReceivedData = true;
            chunkCount++;
            
            // 记录每10个分块的进度
            if (chunkCount % 10 === 0) {
              console.log(`已接收 ${chunkCount} 个数据块，当前总长度: ${responseText.length}`);
            }
            
            callback(newContent);
          }
        }
      } catch (error) {
        console.error('处理流式响应出错:', error);
      }
    }
  }).then(response => {
    // 确保完整的响应被处理
    if (typeof response === 'string') {
      console.log(`请求完成，共接收 ${chunkCount} 个数据块，最终响应长度: ${response.length}`);
      
      if (response.length > previousText.length) {
        const finalContent = response.substring(previousText.length);
        if (finalContent.trim()) {
          callback(finalContent);
        }
      } else if (!hasReceivedData && response.trim()) {
        callback(response);
      }
    }
    return response;
  }).catch(error => {
    // 从错误响应中提取有效内容
    if (error.response && typeof error.response.data === 'string' && error.response.data.trim()) {
      const errorContent = error.response.data;
      console.log(`从错误响应中提取内容，长度: ${errorContent.length}`);
      callback(errorContent);
      return errorContent;
    }
    throw error;
  });
}

/**
 * 上传文件
 * @param {File} file 要上传的文件
 * @returns {Promise} 上传结果
 */
export function uploadFile(file) {
  const formData = new FormData();
  formData.append('file', file);
  
  return request({
    url: '/deepseek/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
}

/**
 * 获取历史对话
 * @param {string} memoryId 对话ID
 * @returns {Promise} 历史对话数据
 */
export function getHistoryChat(memoryId) {
  return request({
    url: `/deepseek/history/${memoryId}`,
    method: 'get'
  });
}

/**
 * 发送聊天消息
 * @param {Object} data 请求数据，包含memoryId和message
 * @returns {Promise} 请求结果
 */
export function sendChatMessage(data) {
  return request({
    url: '/deepseek/message',
    method: 'post',
    data
  });
} 